当前位置:  开发笔记 > 编程语言 > 正文

为什么不|| 似乎在JavaScript中作为coalesce/default运算符工作?

如何解决《为什么不||似乎在JavaScript中作为coalesce/default运算符工作?》经验,为你挑选了1个好方法。

我已经看到一些网页说"a = b ||'blah'"应该将'blah'分配给a,如果b未定义或为null.但是,如果我在Firebug中键入它或在代码中使用它,它会在FF3/win列表中抱怨b未定义.任何提示?

编辑:我正在寻找b可能根本不存在的情况.例如,没有id的DOM节点.



1> Orion Edward..:

如果b存在,并且是false,null等,那么它将以您期望的方式工作.所有你需要做的就是上面的那条线,放var b = null;

如果你考虑一下,这是有道理的.它基本上做了这样的事......

a = function(){ if(b){return b;} else{ return 'blah' } }();

请注意,它检查b的值是否真实...如果b不存在,则会出现异常.

关于未定义的变量

javascript中的"未定义"并不意味着"变量不存在".它意味着"变量的值是undefined" 的特殊值.例:

alert(nosuchvariable);
=> throws exception

var somevariable; // note it's never assigned
alert(somevariable);
=> This alerts with 'undefined'

关于检查变量是否存在.

因此,如果我们尝试阅读b并且没有b这样的变量,我们会得到一个例外.如果我们试图找出是否定义了b,那么这没有用.

您可以通过检查顶级window对象来查看是否存在全局变量.所有全局变量实际上只是window对象中的字段.例:

foo = 'Hello';
alert( window.foo );
=> alerts 'Hello'

因为您知道窗口对象已经存在,所以您可以检查它的字段.
检查javascript中不存在的字段会给你undefined并且不会崩溃,因此你可以进行合并,或者放入undefined变量或其他

对于局部变量(用声明的东西var),你无法检查它们的存在.它们不会以全局变量"生活"在窗口对象中的方式"生活",并且任何引用它的正常尝试都将导致异常:例如:

alert(a);
=> exception because a is meaningless
alert(d45pwiu4309m9rv43);
=> exception because that is equally meaningless

然而,有一个例外(我知道,感谢评论中的J c),typeof运营商.如果你尝试获得不存在的东西的类型,它将不会崩溃,它将返回字符串 "undefined".
这为您提供了一种检查不存在的局部变量的方法.例如:

if( typeof(djfsd) === "undefined" )
  alert('no such variable');

关于不存在的DOM元素

有几条评论提到没有ID的DOM元素等等......

事实上,它是一个DOM元素并不真正相关.将DOM视为数据库或文件,将元素视为该数据库中的行或该文件中的单词.为了对它任何事情,你必须搜索数据库,找到正确的行,然后将数据拉出来.数据被放入javascript对象中.然后,您可以通过操作该对象来访问它,并且可以根据需要将对象放在变量中.例:

document.getElementById('foo');

这进入dom并查找ID为'foo'的元素.如果找到一个,它会将有关该元素的一些信息放入javascript对象中,然后将该对象交还给您.如果它找不到元素,它会将你送回去null,但所有正常的规则仍然适用(你可以坚持null使用变量,或其他任何东西).

它根本不会影响合并.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有